<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::registration::LUM&lt; PointT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1registration_1_1_l_u_m.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">类</a> &#124;
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1registration_1_1_l_u_m-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::registration::LUM&lt; PointT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p>Globally Consistent Scan Matching based on an algorithm by Lu and Milios.  
 <a href="classpcl_1_1registration_1_1_l_u_m.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="lum_8h_source.html">lum.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
类</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1registration_1_1_l_u_m_1_1_edge_properties.html">EdgeProperties</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpcl_1_1registration_1_1_l_u_m_1_1_vertex_properties.html">VertexProperties</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a23e1d1a5184974e14c375149d36aa7f0"><td class="memItemLeft" align="right" valign="top"><a id="a23e1d1a5184974e14c375149d36aa7f0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a23e1d1a5184974e14c375149d36aa7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8120c73c02b0113ef286b8b761f3106b"><td class="memItemLeft" align="right" valign="top"><a id="a8120c73c02b0113ef286b8b761f3106b"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a8120c73c02b0113ef286b8b761f3106b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14bed90c3dc865c9df1b71a67ad4fe74"><td class="memItemLeft" align="right" valign="top"><a id="a14bed90c3dc865c9df1b71a67ad4fe74"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:a14bed90c3dc865c9df1b71a67ad4fe74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a6db6f9c5127c59e375528d54e14cca"><td class="memItemLeft" align="right" valign="top"><a id="a2a6db6f9c5127c59e375528d54e14cca"></a>
typedef PointCloud::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:a2a6db6f9c5127c59e375528d54e14cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2a8c6a21667c42234ef373b1fd82d4f"><td class="memItemLeft" align="right" valign="top"><a id="ad2a8c6a21667c42234ef373b1fd82d4f"></a>
typedef PointCloud::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ad2a8c6a21667c42234ef373b1fd82d4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e22b0796d8b5ae3b9c91232a0267786"><td class="memItemLeft" align="right" valign="top"><a id="a0e22b0796d8b5ae3b9c91232a0267786"></a>
typedef boost::adjacency_list&lt; <a class="el" href="structboost_1_1eigen__vec_s.html">boost::eigen_vecS</a>, <a class="el" href="structboost_1_1eigen__vec_s.html">boost::eigen_vecS</a>, boost::bidirectionalS, <a class="el" href="structpcl_1_1registration_1_1_l_u_m_1_1_vertex_properties.html">VertexProperties</a>, <a class="el" href="structpcl_1_1registration_1_1_l_u_m_1_1_edge_properties.html">EdgeProperties</a>, boost::no_property, <a class="el" href="structboost_1_1eigen__list_s.html">boost::eigen_listS</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>SLAMGraph</b></td></tr>
<tr class="separator:a0e22b0796d8b5ae3b9c91232a0267786"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8193101e46b76019d2e98f8c3e89212b"><td class="memItemLeft" align="right" valign="top"><a id="a8193101e46b76019d2e98f8c3e89212b"></a>
typedef boost::shared_ptr&lt; SLAMGraph &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>SLAMGraphPtr</b></td></tr>
<tr class="separator:a8193101e46b76019d2e98f8c3e89212b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afabca47df9302f50a7a4dd5b01b14c83"><td class="memItemLeft" align="right" valign="top"><a id="afabca47df9302f50a7a4dd5b01b14c83"></a>
typedef SLAMGraph::vertex_descriptor&#160;</td><td class="memItemRight" valign="bottom"><b>Vertex</b></td></tr>
<tr class="separator:afabca47df9302f50a7a4dd5b01b14c83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c841cc81ee2654062b63cba820b3352"><td class="memItemLeft" align="right" valign="top"><a id="a4c841cc81ee2654062b63cba820b3352"></a>
typedef SLAMGraph::edge_descriptor&#160;</td><td class="memItemRight" valign="bottom"><b>Edge</b></td></tr>
<tr class="separator:a4c841cc81ee2654062b63cba820b3352"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:aa9d66a02a1867f3ac9f07caff26a351f"><td class="memItemLeft" align="right" valign="top"><a id="aa9d66a02a1867f3ac9f07caff26a351f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#aa9d66a02a1867f3ac9f07caff26a351f">LUM</a> ()</td></tr>
<tr class="memdesc:aa9d66a02a1867f3ac9f07caff26a351f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:aa9d66a02a1867f3ac9f07caff26a351f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aea83eb9987c33d5a33a2e310f8ae7295"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#aea83eb9987c33d5a33a2e310f8ae7295">setLoopGraph</a> (const SLAMGraphPtr &amp;slam_graph)</td></tr>
<tr class="memdesc:aea83eb9987c33d5a33a2e310f8ae7295"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the internal SLAM graph structure.  <a href="classpcl_1_1registration_1_1_l_u_m.html#aea83eb9987c33d5a33a2e310f8ae7295">更多...</a><br /></td></tr>
<tr class="separator:aea83eb9987c33d5a33a2e310f8ae7295"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4734649ba6830a843feed9e9e019e62e"><td class="memItemLeft" align="right" valign="top">SLAMGraphPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a4734649ba6830a843feed9e9e019e62e">getLoopGraph</a> () const</td></tr>
<tr class="memdesc:a4734649ba6830a843feed9e9e019e62e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the internal SLAM graph structure.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a4734649ba6830a843feed9e9e019e62e">更多...</a><br /></td></tr>
<tr class="separator:a4734649ba6830a843feed9e9e019e62e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22eadc6569a37ff9ccd5d4cda65e5d85"><td class="memItemLeft" align="right" valign="top">SLAMGraph::vertices_size_type&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> () const</td></tr>
<tr class="memdesc:a22eadc6569a37ff9ccd5d4cda65e5d85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of vertices in the SLAM graph.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">更多...</a><br /></td></tr>
<tr class="separator:a22eadc6569a37ff9ccd5d4cda65e5d85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65a8f80484b47482b851db71cef17a07"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a65a8f80484b47482b851db71cef17a07">setMaxIterations</a> (int max_iterations)</td></tr>
<tr class="memdesc:a65a8f80484b47482b851db71cef17a07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum number of iterations for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a65a8f80484b47482b851db71cef17a07">更多...</a><br /></td></tr>
<tr class="separator:a65a8f80484b47482b851db71cef17a07"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa5349f57d5df4e6ceba9da4bf6f6afee"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#aa5349f57d5df4e6ceba9da4bf6f6afee">getMaxIterations</a> () const</td></tr>
<tr class="memdesc:aa5349f57d5df4e6ceba9da4bf6f6afee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum number of iterations for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method.  <a href="classpcl_1_1registration_1_1_l_u_m.html#aa5349f57d5df4e6ceba9da4bf6f6afee">更多...</a><br /></td></tr>
<tr class="separator:aa5349f57d5df4e6ceba9da4bf6f6afee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d964236606833a18e95bb8c3504296d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a5d964236606833a18e95bb8c3504296d">setConvergenceThreshold</a> (float convergence_threshold)</td></tr>
<tr class="memdesc:a5d964236606833a18e95bb8c3504296d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the convergence threshold for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a5d964236606833a18e95bb8c3504296d">更多...</a><br /></td></tr>
<tr class="separator:a5d964236606833a18e95bb8c3504296d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a116e8194e8ea0da1ab88e85491c8e128"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a116e8194e8ea0da1ab88e85491c8e128">getConvergenceThreshold</a> () const</td></tr>
<tr class="memdesc:a116e8194e8ea0da1ab88e85491c8e128"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the convergence threshold for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a116e8194e8ea0da1ab88e85491c8e128">更多...</a><br /></td></tr>
<tr class="separator:a116e8194e8ea0da1ab88e85491c8e128"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af02ab9840050d2b5d49818f4756f83f5"><td class="memItemLeft" align="right" valign="top">Vertex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#af02ab9840050d2b5d49818f4756f83f5">addPointCloud</a> (const PointCloudPtr &amp;cloud, const Eigen::Vector6f &amp;pose=Eigen::Vector6f::Zero())</td></tr>
<tr class="memdesc:af02ab9840050d2b5d49818f4756f83f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a new point cloud to the SLAM graph.  <a href="classpcl_1_1registration_1_1_l_u_m.html#af02ab9840050d2b5d49818f4756f83f5">更多...</a><br /></td></tr>
<tr class="separator:af02ab9840050d2b5d49818f4756f83f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac672ad22fa27925cc3c01e3c6de885ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ac672ad22fa27925cc3c01e3c6de885ed">setPointCloud</a> (const Vertex &amp;vertex, const PointCloudPtr &amp;cloud)</td></tr>
<tr class="memdesc:ac672ad22fa27925cc3c01e3c6de885ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change a point cloud on one of the SLAM graph's vertices.  <a href="classpcl_1_1registration_1_1_l_u_m.html#ac672ad22fa27925cc3c01e3c6de885ed">更多...</a><br /></td></tr>
<tr class="separator:ac672ad22fa27925cc3c01e3c6de885ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca2e8b6ba2f60170e3bcbe37982e3ce4"><td class="memItemLeft" align="right" valign="top">PointCloudPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">getPointCloud</a> (const Vertex &amp;vertex) const</td></tr>
<tr class="memdesc:aca2e8b6ba2f60170e3bcbe37982e3ce4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a point cloud from one of the SLAM graph's vertices.  <a href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">更多...</a><br /></td></tr>
<tr class="separator:aca2e8b6ba2f60170e3bcbe37982e3ce4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab808ee7d1dc3d40e721f385c6c9e21a1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ab808ee7d1dc3d40e721f385c6c9e21a1">setPose</a> (const Vertex &amp;vertex, const Eigen::Vector6f &amp;pose)</td></tr>
<tr class="memdesc:ab808ee7d1dc3d40e721f385c6c9e21a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change a pose estimate on one of the SLAM graph's vertices.  <a href="classpcl_1_1registration_1_1_l_u_m.html#ab808ee7d1dc3d40e721f385c6c9e21a1">更多...</a><br /></td></tr>
<tr class="separator:ab808ee7d1dc3d40e721f385c6c9e21a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad263af099c2692b676442fd5b28ee39b"><td class="memItemLeft" align="right" valign="top">Eigen::Vector6f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b">getPose</a> (const Vertex &amp;vertex) const</td></tr>
<tr class="memdesc:ad263af099c2692b676442fd5b28ee39b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a pose estimate from one of the SLAM graph's vertices.  <a href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b">更多...</a><br /></td></tr>
<tr class="separator:ad263af099c2692b676442fd5b28ee39b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad33e4d184894f161587fef8ebdc1a581"><td class="memItemLeft" align="right" valign="top">Eigen::Affine3f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581">getTransformation</a> (const Vertex &amp;vertex) const</td></tr>
<tr class="memdesc:ad33e4d184894f161587fef8ebdc1a581"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix.  <a href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581">更多...</a><br /></td></tr>
<tr class="separator:ad33e4d184894f161587fef8ebdc1a581"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad3c5f6fceabb3655f6d6e78bfc3063f9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ad3c5f6fceabb3655f6d6e78bfc3063f9">setCorrespondences</a> (const Vertex &amp;source_vertex, const Vertex &amp;target_vertex, const pcl::CorrespondencesPtr &amp;corrs)</td></tr>
<tr class="memdesc:ad3c5f6fceabb3655f6d6e78bfc3063f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add/change a set of correspondences for one of the SLAM graph's edges.  <a href="classpcl_1_1registration_1_1_l_u_m.html#ad3c5f6fceabb3655f6d6e78bfc3063f9">更多...</a><br /></td></tr>
<tr class="separator:ad3c5f6fceabb3655f6d6e78bfc3063f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab83f80d5d2b23497058317491fd8c510"><td class="memItemLeft" align="right" valign="top">pcl::CorrespondencesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ab83f80d5d2b23497058317491fd8c510">getCorrespondences</a> (const Vertex &amp;source_vertex, const Vertex &amp;target_vertex) const</td></tr>
<tr class="memdesc:ab83f80d5d2b23497058317491fd8c510"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a set of correspondences from one of the SLAM graph's edges.  <a href="classpcl_1_1registration_1_1_l_u_m.html#ab83f80d5d2b23497058317491fd8c510">更多...</a><br /></td></tr>
<tr class="separator:ab83f80d5d2b23497058317491fd8c510"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0eeba16c08a09d4379cb034a471b5500"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500">compute</a> ()</td></tr>
<tr class="memdesc:a0eeba16c08a09d4379cb034a471b5500"><td class="mdescLeft">&#160;</td><td class="mdescRight">Perform <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a>'s globally consistent scan matching.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500">更多...</a><br /></td></tr>
<tr class="separator:a0eeba16c08a09d4379cb034a471b5500"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9520ce2395ef0c56e8ec2e4eb58e751c"><td class="memItemLeft" align="right" valign="top">PointCloudPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a9520ce2395ef0c56e8ec2e4eb58e751c">getTransformedCloud</a> (const Vertex &amp;vertex) const</td></tr>
<tr class="memdesc:a9520ce2395ef0c56e8ec2e4eb58e751c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a point cloud from one of the SLAM graph's vertices compounded onto its current pose estimate.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a9520ce2395ef0c56e8ec2e4eb58e751c">更多...</a><br /></td></tr>
<tr class="separator:a9520ce2395ef0c56e8ec2e4eb58e751c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66915cba98627abd82a71293d12e3b22"><td class="memItemLeft" align="right" valign="top">PointCloudPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a66915cba98627abd82a71293d12e3b22">getConcatenatedCloud</a> () const</td></tr>
<tr class="memdesc:a66915cba98627abd82a71293d12e3b22"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current pose estimates.  <a href="classpcl_1_1registration_1_1_l_u_m.html#a66915cba98627abd82a71293d12e3b22">更多...</a><br /></td></tr>
<tr class="separator:a66915cba98627abd82a71293d12e3b22"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:a2de5ccd129252ab810d7895646effa3d"><td class="memItemLeft" align="right" valign="top"><a id="a2de5ccd129252ab810d7895646effa3d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a2de5ccd129252ab810d7895646effa3d">computeEdge</a> (const Edge &amp;e)</td></tr>
<tr class="memdesc:a2de5ccd129252ab810d7895646effa3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Linearized computation of C^-1 and C^-1*D (results stored in slam_graph_). <br /></td></tr>
<tr class="separator:a2de5ccd129252ab810d7895646effa3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12ea6d99451d118ea13a6456f76ff825"><td class="memItemLeft" align="right" valign="top"><a id="a12ea6d99451d118ea13a6456f76ff825"></a>
Eigen::Matrix6f&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a12ea6d99451d118ea13a6456f76ff825">incidenceCorrection</a> (const Eigen::Vector6f &amp;pose)</td></tr>
<tr class="memdesc:a12ea6d99451d118ea13a6456f76ff825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pose corrected 6DoF incidence matrix. <br /></td></tr>
<tr class="separator:a12ea6d99451d118ea13a6456f76ff825"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:a645ac5f526d69b8abfe4e22779f4ffba"><td class="memItemLeft" align="right" valign="top"><a id="a645ac5f526d69b8abfe4e22779f4ffba"></a>
SLAMGraphPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a></td></tr>
<tr class="memdesc:a645ac5f526d69b8abfe4e22779f4ffba"><td class="mdescLeft">&#160;</td><td class="mdescRight">The internal SLAM graph structure. <br /></td></tr>
<tr class="separator:a645ac5f526d69b8abfe4e22779f4ffba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab246377b8f33ecebc06801903f406dea"><td class="memItemLeft" align="right" valign="top"><a id="ab246377b8f33ecebc06801903f406dea"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ab246377b8f33ecebc06801903f406dea">max_iterations_</a></td></tr>
<tr class="memdesc:ab246377b8f33ecebc06801903f406dea"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of iterations for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method. <br /></td></tr>
<tr class="separator:ab246377b8f33ecebc06801903f406dea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fb259311e13ca9fd7c043eb00634ba8"><td class="memItemLeft" align="right" valign="top"><a id="a0fb259311e13ca9fd7c043eb00634ba8"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0fb259311e13ca9fd7c043eb00634ba8">convergence_threshold_</a></td></tr>
<tr class="memdesc:a0fb259311e13ca9fd7c043eb00634ba8"><td class="mdescLeft">&#160;</td><td class="mdescRight">The convergence threshold for the summed vector lengths of all poses. <br /></td></tr>
<tr class="separator:a0fb259311e13ca9fd7c043eb00634ba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointT&gt;<br />
class pcl::registration::LUM&lt; PointT &gt;</h3>

<p>Globally Consistent Scan Matching based on an algorithm by Lu and Milios. </p>
<p>A GraphSLAM algorithm where registration data is managed in a graph: </p><ul>
<li>
<a class="el" href="structpcl_1_1_vertices.html" title="Describes a set of vertices in a polygon mesh, by basically storing an array of indices.">Vertices</a> represent poses and hold the point cloud data and relative transformations. </li>
<li>
Edges represent pose constraints and hold the correspondence data between two point clouds. </li>
</ul>
<p>Computation uses the first point cloud in the SLAM graph as a reference pose and attempts to align all other point clouds to it simultaneously. For more information: </p><ul>
<li>
F. Lu, E. Milios, Globally Consistent Range Scan Alignment for Environment Mapping, Autonomous Robots 4, April 1997 </li>
<li>
Dorit Borrmann, Jan Elseberg, Kai Lingemann, Andreas Nüchter, and Joachim Hertzberg, The Efficient Extension of Globally Consistent Scan Matching to 6 DoF, In Proceedings of the 4th International Symposium on 3D Data Processing, Visualization and Transmission (3DPVT '08), June 2008 </li>
</ul>
<p>Usage example: </p><div class="fragment"><div class="line"><a class="code" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM&lt;pcl::PointXYZ&gt;</a> lum;</div>
<div class="line"><span class="comment">// Add point clouds as vertices to the SLAM graph</span></div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#af02ab9840050d2b5d49818f4756f83f5">addPointCloud</a> (cloud_0);</div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#af02ab9840050d2b5d49818f4756f83f5">addPointCloud</a> (cloud_1);</div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#af02ab9840050d2b5d49818f4756f83f5">addPointCloud</a> (cloud_2);</div>
<div class="line"><span class="comment">// Use your favorite pairwise correspondence estimation algorithm(s)</span></div>
<div class="line">corrs_0_to_1 = someAlgo (cloud_0, cloud_1);</div>
<div class="line">corrs_1_to_2 = someAlgo (cloud_1, cloud_2);</div>
<div class="line">corrs_2_to_0 = someAlgo (lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">getPointCloud</a> (2), lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">getPointCloud</a> (0));</div>
<div class="line"><span class="comment">// Add the correspondence results as edges to the SLAM graph</span></div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad3c5f6fceabb3655f6d6e78bfc3063f9">setCorrespondences</a> (0, 1, corrs_0_to_1);</div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad3c5f6fceabb3655f6d6e78bfc3063f9">setCorrespondences</a> (1, 2, corrs_1_to_2);</div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad3c5f6fceabb3655f6d6e78bfc3063f9">setCorrespondences</a> (2, 0, corrs_2_to_0);</div>
<div class="line"><span class="comment">// Change the computation parameters</span></div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a65a8f80484b47482b851db71cef17a07">setMaxIterations</a> (5);</div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a5d964236606833a18e95bb8c3504296d">setConvergenceThreshold</a> (0.0);</div>
<div class="line"><span class="comment">// Perform the actual LUM computation</span></div>
<div class="line">lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500">compute</a> ();</div>
<div class="line"><span class="comment">// Return the concatenated point cloud result</span></div>
<div class="line">cloud_out = lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a66915cba98627abd82a71293d12e3b22">getConcatenatedCloud</a> ();</div>
<div class="line"><span class="comment">// Return the separate point cloud transformations</span></div>
<div class="line"><span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> (); i++)</div>
<div class="line">{</div>
<div class="line">  transforms_out[i] = lum.<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581">getTransformation</a> (i);</div>
<div class="line">}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a></div><div class="ttdoc">Globally Consistent Scan Matching based on an algorithm by Lu and Milios.</div><div class="ttdef"><b>Definition:</b> lum.h:111</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a0eeba16c08a09d4379cb034a471b5500"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500">pcl::registration::LUM::compute</a></div><div class="ttdeci">void compute()</div><div class="ttdoc">Perform LUM's globally consistent scan matching.</div><div class="ttdef"><b>Definition:</b> lum.hpp:209</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a22eadc6569a37ff9ccd5d4cda65e5d85"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">pcl::registration::LUM::getNumVertices</a></div><div class="ttdeci">SLAMGraph::vertices_size_type getNumVertices() const</div><div class="ttdoc">Get the number of vertices in the SLAM graph.</div><div class="ttdef"><b>Definition:</b> lum.hpp:60</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a5d964236606833a18e95bb8c3504296d"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a5d964236606833a18e95bb8c3504296d">pcl::registration::LUM::setConvergenceThreshold</a></div><div class="ttdeci">void setConvergenceThreshold(float convergence_threshold)</div><div class="ttdoc">Set the convergence threshold for the compute() method.</div><div class="ttdef"><b>Definition:</b> lum.hpp:81</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a65a8f80484b47482b851db71cef17a07"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a65a8f80484b47482b851db71cef17a07">pcl::registration::LUM::setMaxIterations</a></div><div class="ttdeci">void setMaxIterations(int max_iterations)</div><div class="ttdoc">Set the maximum number of iterations for the compute() method.</div><div class="ttdef"><b>Definition:</b> lum.hpp:67</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a66915cba98627abd82a71293d12e3b22"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a66915cba98627abd82a71293d12e3b22">pcl::registration::LUM::getConcatenatedCloud</a></div><div class="ttdeci">PointCloudPtr getConcatenatedCloud() const</div><div class="ttdoc">Return a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current ...</div><div class="ttdef"><b>Definition:</b> lum.hpp:282</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_aca2e8b6ba2f60170e3bcbe37982e3ce4"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">pcl::registration::LUM::getPointCloud</a></div><div class="ttdeci">PointCloudPtr getPointCloud(const Vertex &amp;vertex) const</div><div class="ttdoc">Return a point cloud from one of the SLAM graph's vertices.</div><div class="ttdef"><b>Definition:</b> lum.hpp:123</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_ad33e4d184894f161587fef8ebdc1a581"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581">pcl::registration::LUM::getTransformation</a></div><div class="ttdeci">Eigen::Affine3f getTransformation(const Vertex &amp;vertex) const</div><div class="ttdoc">Return a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix.</div><div class="ttdef"><b>Definition:</b> lum.hpp:164</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_ad3c5f6fceabb3655f6d6e78bfc3063f9"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#ad3c5f6fceabb3655f6d6e78bfc3063f9">pcl::registration::LUM::setCorrespondences</a></div><div class="ttdeci">void setCorrespondences(const Vertex &amp;source_vertex, const Vertex &amp;target_vertex, const pcl::CorrespondencesPtr &amp;corrs)</div><div class="ttdoc">Add/change a set of correspondences for one of the SLAM graph's edges.</div><div class="ttdef"><b>Definition:</b> lum.hpp:172</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_af02ab9840050d2b5d49818f4756f83f5"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#af02ab9840050d2b5d49818f4756f83f5">pcl::registration::LUM::addPointCloud</a></div><div class="ttdeci">Vertex addPointCloud(const PointCloudPtr &amp;cloud, const Eigen::Vector6f &amp;pose=Eigen::Vector6f::Zero())</div><div class="ttdoc">Add a new point cloud to the SLAM graph.</div><div class="ttdef"><b>Definition:</b> lum.hpp:95</div></div>
</div><!-- fragment --> <dl class="section author"><dt>作者</dt><dd>Frits Florentinus, Jochen Sprickerhof </dd></dl>
</div><h2 class="groupheader">成员函数说明</h2>
<a id="af02ab9840050d2b5d49818f4756f83f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af02ab9840050d2b5d49818f4756f83f5">&#9670;&nbsp;</a></span>addPointCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::Vertex <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::addPointCloud </td>
          <td>(</td>
          <td class="paramtype">const PointCloudPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector6f &amp;&#160;</td>
          <td class="paramname"><em>pose</em> = <code>Eigen::Vector6f::Zero&#160;()</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Add a new point cloud to the SLAM graph. </p>
<p>This method will add a new vertex to the SLAM graph and attach a point cloud to that vertex. Optionally you can specify a pose estimate for this point cloud. A vertex' pose is always relative to the first vertex in the SLAM graph, i.e. the first point cloud that was added. Because this first vertex is the reference, you can not set a pose estimate for this vertex. Providing pose estimates to the vertices in the SLAM graph will reduce overall computation time of <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a>. </p><dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>The new point cloud. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pose</td><td>(optional) The pose estimate relative to the reference pose (first point cloud that was added). </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>The vertex descriptor of the newly created vertex. </dd></dl>
<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;{</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  Vertex v = add_vertex (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  (*slam_graph_)[v].cloud_ = cloud;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordflow">if</span> (v == 0 &amp;&amp; pose != Eigen::Vector6f::Zero ())</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  {</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    PCL_WARN(<span class="stringliteral">&quot;[pcl::registration::LUM::addPointCloud] The pose estimate is ignored for the first cloud in the graph since that will become the reference pose.\n&quot;</span>);</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    (*slam_graph_)[v].pose_ = Eigen::Vector6f::Zero ();</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">return</span> (v);</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  }</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  (*slam_graph_)[v].pose_ = pose;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <span class="keywordflow">return</span> (v);</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a645ac5f526d69b8abfe4e22779f4ffba"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">pcl::registration::LUM::slam_graph_</a></div><div class="ttdeci">SLAMGraphPtr slam_graph_</div><div class="ttdoc">The internal SLAM graph structure.</div><div class="ttdef"><b>Definition:</b> lum.h:331</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a0eeba16c08a09d4379cb034a471b5500"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0eeba16c08a09d4379cb034a471b5500">&#9670;&nbsp;</a></span>compute()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::compute</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Perform <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a>'s globally consistent scan matching. </p>
<p>Computation uses the first point cloud in the SLAM graph as a reference pose and attempts to align all other point clouds to it simultaneously. <br  />
 Things to keep in mind: </p><ul>
<li>
Only those parts of the graph connected to the reference pose will properly align to it. </li>
<li>
All sets of correspondences should span the same space and need to be sufficient to determine a rigid transformation. </li>
<li>
The algorithm draws it strength from loops in the graph because it will distribute errors evenly amongst those loops. </li>
</ul>
<p>Computation ends when either of the following conditions hold: </p><ul>
<li>
The number of iterations reaches max_iterations. Use <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a65a8f80484b47482b851db71cef17a07" title="Set the maximum number of iterations for the compute() method.">setMaxIterations()</a> to change. </li>
<li>
The convergence criteria is met. Use <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a5d964236606833a18e95bb8c3504296d" title="Set the convergence threshold for the compute() method.">setConvergenceThreshold()</a> to change. </li>
</ul>
<p>Computation will change the pose estimates for the vertices of the SLAM graph, not the point clouds attached to them. The results can be retrieved with <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b" title="Return a pose estimate from one of the SLAM graph&#39;s vertices.">getPose()</a>, <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581" title="Return a pose estimate from one of the SLAM graph&#39;s vertices as an affine transformation matrix.">getTransformation()</a>, <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a9520ce2395ef0c56e8ec2e4eb58e751c" title="Return a point cloud from one of the SLAM graph&#39;s vertices compounded onto its current pose estimate.">getTransformedCloud()</a> or <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a66915cba98627abd82a71293d12e3b22" title="Return a concatenated point cloud of all the SLAM graph&#39;s point clouds compounded onto their current ...">getConcatenatedCloud()</a>. </p>
<div class="fragment"><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;{</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  <span class="keywordtype">int</span> n = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> ());</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <span class="keywordflow">if</span> (n &lt; 2)</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  {</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::compute] The slam graph needs at least 2 vertices.\n&quot;</span>);</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  }</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ab246377b8f33ecebc06801903f406dea">max_iterations_</a>; ++i)</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  {</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="comment">// Linearized computation of C^-1 and C^-1*D and convergence checking for all edges in the graph (results stored in slam_graph_)</span></div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keyword">typename</span> SLAMGraph::edge_iterator e, e_end;</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordflow">for</span> (boost::tuples::tie (e, e_end) = edges (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>); e != e_end; ++e)</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a2de5ccd129252ab810d7895646effa3d">computeEdge</a> (*e);</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="comment">// Declare matrices G and B</span></div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    Eigen::MatrixXf G = Eigen::MatrixXf::Zero (6 * (n - 1), 6 * (n - 1));</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    Eigen::VectorXf B = Eigen::VectorXf::Zero (6 * (n - 1));</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="comment">// Start at 1 because 0 is the reference pose</span></div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> vi = 1; vi != n; ++vi)</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    {</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> vj = 0; vj != n; ++vj)</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;      {</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        <span class="comment">// Attempt to use the forward edge, otherwise use backward edge, otherwise there was no edge</span></div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        Edge e;</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="keywordtype">bool</span> present1, present2;</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        boost::tuples::tie (e, present1) = edge (vi, vj, *<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        <span class="keywordflow">if</span> (!present1)</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        {</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;          boost::tuples::tie (e, present2) = edge (vj, vi, *<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;          <span class="keywordflow">if</span> (!present2)</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;            <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="comment">// Fill in elements of G and B</span></div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keywordflow">if</span> (vj &gt; 0)</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;          G.block (6 * (vi - 1), 6 * (vj - 1), 6, 6) = -(*slam_graph_)[e].cinv_;</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        G.block (6 * (vi - 1), 6 * (vi - 1), 6, 6) += (*slam_graph_)[e].cinv_;</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        B.segment (6 * (vi - 1), 6) += (present1 ? 1 : -1) * (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>)[e].cinvd_;</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;      }</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    }</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="comment">// Computation of the linear equation system: GX = B</span></div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="comment">// TODO investigate accuracy vs. speed tradeoff and find the best solving method for our type of linear equation (sparse)</span></div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    Eigen::VectorXf X = G.colPivHouseholderQr ().solve (B);</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160; </div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="comment">// Update the poses</span></div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordtype">float</span> sum = 0.0;</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> vi = 1; vi != n; ++vi)</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    {</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;      Eigen::Vector6f difference_pose = <span class="keyword">static_cast&lt;</span>Eigen::Vector6f<span class="keyword">&gt;</span> (-<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a12ea6d99451d118ea13a6456f76ff825">incidenceCorrection</a> (<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b">getPose</a> (vi)).inverse () * X.segment (6 * (vi - 1), 6));</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;      sum += difference_pose.norm ();</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ab808ee7d1dc3d40e721f385c6c9e21a1">setPose</a> (vi, <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b">getPose</a> (vi) + difference_pose);</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    }</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="comment">// Convergence check</span></div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">if</span> (sum &lt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a0fb259311e13ca9fd7c043eb00634ba8">convergence_threshold_</a> * <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (n - 1))</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  }</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a0fb259311e13ca9fd7c043eb00634ba8"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a0fb259311e13ca9fd7c043eb00634ba8">pcl::registration::LUM::convergence_threshold_</a></div><div class="ttdeci">float convergence_threshold_</div><div class="ttdoc">The convergence threshold for the summed vector lengths of all poses.</div><div class="ttdef"><b>Definition:</b> lum.h:337</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a12ea6d99451d118ea13a6456f76ff825"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a12ea6d99451d118ea13a6456f76ff825">pcl::registration::LUM::incidenceCorrection</a></div><div class="ttdeci">Eigen::Matrix6f incidenceCorrection(const Eigen::Vector6f &amp;pose)</div><div class="ttdoc">Returns a pose corrected 6DoF incidence matrix.</div><div class="ttdef"><b>Definition:</b> lum.hpp:401</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_a2de5ccd129252ab810d7895646effa3d"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#a2de5ccd129252ab810d7895646effa3d">pcl::registration::LUM::computeEdge</a></div><div class="ttdeci">void computeEdge(const Edge &amp;e)</div><div class="ttdoc">Linearized computation of C^-1 and C^-1*D (results stored in slam_graph_).</div><div class="ttdef"><b>Definition:</b> lum.hpp:297</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_ab246377b8f33ecebc06801903f406dea"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#ab246377b8f33ecebc06801903f406dea">pcl::registration::LUM::max_iterations_</a></div><div class="ttdeci">int max_iterations_</div><div class="ttdoc">The maximum number of iterations for the compute() method.</div><div class="ttdef"><b>Definition:</b> lum.h:334</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_ab808ee7d1dc3d40e721f385c6c9e21a1"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#ab808ee7d1dc3d40e721f385c6c9e21a1">pcl::registration::LUM::setPose</a></div><div class="ttdeci">void setPose(const Vertex &amp;vertex, const Eigen::Vector6f &amp;pose)</div><div class="ttdoc">Change a pose estimate on one of the SLAM graph's vertices.</div><div class="ttdef"><b>Definition:</b> lum.hpp:135</div></div>
<div class="ttc" id="aclasspcl_1_1registration_1_1_l_u_m_html_ad263af099c2692b676442fd5b28ee39b"><div class="ttname"><a href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b">pcl::registration::LUM::getPose</a></div><div class="ttdeci">Eigen::Vector6f getPose(const Vertex &amp;vertex) const</div><div class="ttdoc">Return a pose estimate from one of the SLAM graph's vertices.</div><div class="ttdef"><b>Definition:</b> lum.hpp:152</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a66915cba98627abd82a71293d12e3b22"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a66915cba98627abd82a71293d12e3b22">&#9670;&nbsp;</a></span>getConcatenatedCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::PointCloudPtr <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getConcatenatedCloud</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return a concatenated point cloud of all the SLAM graph's point clouds compounded onto their current pose estimates. </p>
<dl class="section return"><dt>返回</dt><dd>The concatenated transformed point clouds of the entire SLAM graph. </dd></dl>
<div class="fragment"><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;{</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  PointCloudPtr out (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">PointCloud</a>);</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  <span class="keyword">typename</span> SLAMGraph::vertex_iterator v, v_end;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;  <span class="keywordflow">for</span> (boost::tuples::tie (v, v_end) = vertices (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>); v != v_end; ++v)</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;  {</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <a class="code" href="classpcl_1_1_point_cloud.html">PointCloud</a> temp;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">getPointCloud</a> (*v), temp, <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581">getTransformation</a> (*v));</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    *out += temp;</div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  }</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <span class="keywordflow">return</span> (out);</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_point_cloud_html"><div class="ttname"><a href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a></div><div class="ttdoc">PointCloud represents the base class in PCL for storing collections of 3D points.</div><div class="ttdef"><b>Definition:</b> point_cloud.h:173</div></div>
<div class="ttc" id="agroup__common_html_ga52d532f7f2b4d7bba78d13701d3a33d8"><div class="ttname"><a href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a></div><div class="ttdeci">void transformPointCloud(const pcl::PointCloud&lt; PointT &gt; &amp;cloud_in, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</div><div class="ttdoc">Apply an affine transform defined by an Eigen Transform</div><div class="ttdef"><b>Definition:</b> transforms.hpp:42</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a116e8194e8ea0da1ab88e85491c8e128"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a116e8194e8ea0da1ab88e85491c8e128">&#9670;&nbsp;</a></span>getConvergenceThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getConvergenceThreshold</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the convergence threshold for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method. </p>
<p>When the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method computes the new poses relative to the old poses, it will determine the length of the difference vector. When the average length of all difference vectors becomes less than the convergence_threshold the convergence is assumed to be met. </p><dl class="section return"><dt>返回</dt><dd>The current convergence threshold (default = 0.0). </dd></dl>
<div class="fragment"><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;{</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a0fb259311e13ca9fd7c043eb00634ba8">convergence_threshold_</a>);</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab83f80d5d2b23497058317491fd8c510"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab83f80d5d2b23497058317491fd8c510">&#9670;&nbsp;</a></span>getCorrespondences()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">pcl::CorrespondencesPtr <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getCorrespondences </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>source_vertex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>target_vertex</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return a set of correspondences from one of the SLAM graph's edges. </p>
<dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">source_vertex</td><td>The vertex descriptor of the correspondences' source point cloud. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">target_vertex</td><td>The vertex descriptor of the correspondences' target point cloud. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>The current set of correspondences of that edge. </dd></dl>
<div class="fragment"><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;{</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="keywordflow">if</span> (source_vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> () || target_vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> ())</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  {</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::getCorrespondences] You are attempting to get a set of correspondences between non-existing graph vertices.\n&quot;</span>);</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keywordflow">return</span> (pcl::CorrespondencesPtr ());</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  }</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  Edge e;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keywordtype">bool</span> present;</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  boost::tuples::tie (e, present) = edge (source_vertex, target_vertex, *<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keywordflow">if</span> (!present)</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  {</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::getCorrespondences] You are attempting to get a set of correspondences from a non-existing graph edge.\n&quot;</span>);</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keywordflow">return</span> (pcl::CorrespondencesPtr ());</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  }</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  <span class="keywordflow">return</span> ((*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>)[e].corrs_);</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4734649ba6830a843feed9e9e019e62e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4734649ba6830a843feed9e9e019e62e">&#9670;&nbsp;</a></span>getLoopGraph()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::SLAMGraphPtr <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getLoopGraph</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the internal SLAM graph structure. </p>
<p>All data used and produced by <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a> is stored in this boost::adjacency_list. It is recommended to use the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a> class itself to build the graph. This method could otherwise be useful for managing several SLAM graphs in one instance of <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a>. </p><dl class="section return"><dt>返回</dt><dd>The current SLAM graph. </dd></dl>
<div class="fragment"><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;{</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aa5349f57d5df4e6ceba9da4bf6f6afee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa5349f57d5df4e6ceba9da4bf6f6afee">&#9670;&nbsp;</a></span>getMaxIterations()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getMaxIterations</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the maximum number of iterations for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method. </p>
<p>The <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method finishes when max_iterations are met or when the convergence criteria is met. </p><dl class="section return"><dt>返回</dt><dd>The current maximum number of iterations (default = 5). </dd></dl>
<div class="fragment"><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;{</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ab246377b8f33ecebc06801903f406dea">max_iterations_</a>);</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a22eadc6569a37ff9ccd5d4cda65e5d85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22eadc6569a37ff9ccd5d4cda65e5d85">&#9670;&nbsp;</a></span>getNumVertices()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::SLAMGraph::vertices_size_type <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getNumVertices</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get the number of vertices in the SLAM graph. </p>
<dl class="section return"><dt>返回</dt><dd>The current number of vertices in the SLAM graph. </dd></dl>
<div class="fragment"><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;{</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">return</span> (num_vertices (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>));</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aca2e8b6ba2f60170e3bcbe37982e3ce4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca2e8b6ba2f60170e3bcbe37982e3ce4">&#9670;&nbsp;</a></span>getPointCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::PointCloudPtr <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getPointCloud </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>vertex</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return a point cloud from one of the SLAM graph's vertices. </p>
<dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertex</td><td>The vertex descriptor of which to return the point cloud. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>The current point cloud for that vertex. </dd></dl>
<div class="fragment"><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;{</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  <span class="keywordflow">if</span> (vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> ())</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  {</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::getPointCloud] You are attempting to get a point cloud from a non-existing graph vertex.\n&quot;</span>);</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordflow">return</span> (PointCloudPtr ());</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  }</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">return</span> ((*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>)[vertex].cloud_);</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad263af099c2692b676442fd5b28ee39b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad263af099c2692b676442fd5b28ee39b">&#9670;&nbsp;</a></span>getPose()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Vector6f <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getPose </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>vertex</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return a pose estimate from one of the SLAM graph's vertices. </p>
<dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertex</td><td>The vertex descriptor of which to return the pose estimate. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>The current pose estimate of that vertex. </dd></dl>
<div class="fragment"><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;{</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  <span class="keywordflow">if</span> (vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> ())</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  {</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::getPose] You are attempting to get a pose estimate from a non-existing graph vertex.\n&quot;</span>);</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">return</span> (Eigen::Vector6f::Zero ());</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  <span class="keywordflow">return</span> ((*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>)[vertex].pose_);</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad33e4d184894f161587fef8ebdc1a581"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad33e4d184894f161587fef8ebdc1a581">&#9670;&nbsp;</a></span>getTransformation()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Affine3f <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getTransformation </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>vertex</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return a pose estimate from one of the SLAM graph's vertices as an affine transformation matrix. </p>
<dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertex</td><td>The vertex descriptor of which to return the transformation matrix. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>The current transformation matrix of that vertex. </dd></dl>
<div class="fragment"><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;{</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  Eigen::Vector6f pose = <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad263af099c2692b676442fd5b28ee39b">getPose</a> (vertex);</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  <span class="keywordflow">return</span> (<a class="code" href="group__common.html#ga5cc746d1fd72f99fee462ed1a9e4abea">pcl::getTransformation</a> (pose (0), pose (1), pose (2), pose (3), pose (4), pose (5)));</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;}</div>
<div class="ttc" id="agroup__common_html_ga5cc746d1fd72f99fee462ed1a9e4abea"><div class="ttname"><a href="group__common.html#ga5cc746d1fd72f99fee462ed1a9e4abea">pcl::getTransformation</a></div><div class="ttdeci">void getTransformation(Scalar x, Scalar y, Scalar z, Scalar roll, Scalar pitch, Scalar yaw, Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;t)</div><div class="ttdoc">Create a transformation from the given translation and Euler angles (XYZ-convention)</div><div class="ttdef"><b>Definition:</b> eigen.hpp:687</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a9520ce2395ef0c56e8ec2e4eb58e751c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9520ce2395ef0c56e8ec2e4eb58e751c">&#9670;&nbsp;</a></span>getTransformedCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::PointCloudPtr <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getTransformedCloud </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>vertex</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return a point cloud from one of the SLAM graph's vertices compounded onto its current pose estimate. </p>
<dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertex</td><td>The vertex descriptor of which to return the transformed point cloud. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>The transformed point cloud of that vertex. </dd></dl>
<div class="fragment"><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;{</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  PointCloudPtr out (<span class="keyword">new</span> <a class="code" href="classpcl_1_1_point_cloud.html">PointCloud</a>);</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a> (*<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#aca2e8b6ba2f60170e3bcbe37982e3ce4">getPointCloud</a> (vertex), *out, <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ad33e4d184894f161587fef8ebdc1a581">getTransformation</a> (vertex));</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  <span class="keywordflow">return</span> (out);</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5d964236606833a18e95bb8c3504296d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d964236606833a18e95bb8c3504296d">&#9670;&nbsp;</a></span>setConvergenceThreshold()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setConvergenceThreshold </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>convergence_threshold</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the convergence threshold for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method. </p>
<p>When the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method computes the new poses relative to the old poses, it will determine the length of the difference vector. When the average length of all difference vectors becomes less than the convergence_threshold the convergence is assumed to be met. </p><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">convergence_threshold</td><td>The new convergence threshold (default = 0.0). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;{</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a0fb259311e13ca9fd7c043eb00634ba8">convergence_threshold_</a> = convergence_threshold;</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad3c5f6fceabb3655f6d6e78bfc3063f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad3c5f6fceabb3655f6d6e78bfc3063f9">&#9670;&nbsp;</a></span>setCorrespondences()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setCorrespondences </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>source_vertex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>target_vertex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const pcl::CorrespondencesPtr &amp;&#160;</td>
          <td class="paramname"><em>corrs</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Add/change a set of correspondences for one of the SLAM graph's edges. </p>
<p>The edges in the SLAM graph are directional and point from source vertex to target vertex. The query indices of the correspondences, index the points at the source vertex' point cloud. The matching indices of the correspondences, index the points at the target vertex' point cloud. If no edge was present at the specified location, this method will add a new edge to the SLAM graph and attach the correspondences to that edge. If the edge was already present, this method will overwrite the correspondence information of that edge and will not alter the SLAM graph structure. </p><dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">source_vertex</td><td>The vertex descriptor of the correspondences' source point cloud. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">target_vertex</td><td>The vertex descriptor of the correspondences' target point cloud. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">corrs</td><td>The new set of correspondences for that edge. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;{</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  <span class="keywordflow">if</span> (source_vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> () || target_vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> () || source_vertex == target_vertex)</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  {</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::setCorrespondences] You are attempting to set a set of correspondences between non-existing or identical graph vertices.\n&quot;</span>);</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  }</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  Edge e;</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  <span class="keywordtype">bool</span> present;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  boost::tuples::tie (e, present) = edge (source_vertex, target_vertex, *<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <span class="keywordflow">if</span> (!present)</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    boost::tuples::tie (e, present) = add_edge (source_vertex, target_vertex, *<a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a>);</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  (*slam_graph_)[e].corrs_ = corrs;</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aea83eb9987c33d5a33a2e310f8ae7295"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea83eb9987c33d5a33a2e310f8ae7295">&#9670;&nbsp;</a></span>setLoopGraph()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setLoopGraph </td>
          <td>(</td>
          <td class="paramtype">const SLAMGraphPtr &amp;&#160;</td>
          <td class="paramname"><em>slam_graph</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the internal SLAM graph structure. </p>
<p>All data used and produced by <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a> is stored in this boost::adjacency_list. It is recommended to use the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a> class itself to build the graph. This method could otherwise be useful for managing several SLAM graphs in one instance of <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a>. </p><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">slam_graph</td><td>The new SLAM graph. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a645ac5f526d69b8abfe4e22779f4ffba">slam_graph_</a> = slam_graph;</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a65a8f80484b47482b851db71cef17a07"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65a8f80484b47482b851db71cef17a07">&#9670;&nbsp;</a></span>setMaxIterations()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setMaxIterations </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>max_iterations</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the maximum number of iterations for the <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method. </p>
<p>The <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html#a0eeba16c08a09d4379cb034a471b5500" title="Perform LUM&#39;s globally consistent scan matching.">compute()</a> method finishes when max_iterations are met or when the convergence criteria is met. </p><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">max_iterations</td><td>The new maximum number of iterations (default = 5). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;{</div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#ab246377b8f33ecebc06801903f406dea">max_iterations_</a> = max_iterations;</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ac672ad22fa27925cc3c01e3c6de885ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac672ad22fa27925cc3c01e3c6de885ed">&#9670;&nbsp;</a></span>setPointCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setPointCloud </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>vertex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const PointCloudPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Change a point cloud on one of the SLAM graph's vertices. </p>
<p>This method will change the point cloud attached to an existing vertex and will not alter the SLAM graph structure. Note that the correspondences attached to this vertex will not change and may need to be updated manually. </p><dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertex</td><td>The vertex descriptor of which to change the point cloud. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>The new point cloud for that vertex. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;{</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keywordflow">if</span> (vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> ())</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  {</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::setPointCloud] You are attempting to set a point cloud to a non-existing graph vertex.\n&quot;</span>);</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  }</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  (*slam_graph_)[vertex].cloud_ = cloud;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ab808ee7d1dc3d40e721f385c6c9e21a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab808ee7d1dc3d40e721f385c6c9e21a1">&#9670;&nbsp;</a></span>setPose()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">pcl::registration::LUM</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setPose </td>
          <td>(</td>
          <td class="paramtype">const Vertex &amp;&#160;</td>
          <td class="paramname"><em>vertex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector6f &amp;&#160;</td>
          <td class="paramname"><em>pose</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Change a pose estimate on one of the SLAM graph's vertices. </p>
<p>A vertex' pose is always relative to the first vertex in the SLAM graph, i.e. the first point cloud that was added. Because this first vertex is the reference, you can not set a pose estimate for this vertex. Providing pose estimates to the vertices in the SLAM graph will reduce overall computation time of <a class="el" href="classpcl_1_1registration_1_1_l_u_m.html" title="Globally Consistent Scan Matching based on an algorithm by Lu and Milios.">LUM</a>. </p><dl class="section note"><dt>注解</dt><dd>Vertex descriptors are typecastable to int. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertex</td><td>The vertex descriptor of which to set the pose estimate. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pose</td><td>The new pose estimate for that vertex. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="keywordflow">if</span> (vertex &gt;= <a class="code" href="classpcl_1_1registration_1_1_l_u_m.html#a22eadc6569a37ff9ccd5d4cda65e5d85">getNumVertices</a> ())</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  {</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::setPose] You are attempting to set a pose estimate to a non-existing graph vertex.\n&quot;</span>);</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  }</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keywordflow">if</span> (vertex == 0)</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  {</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    PCL_ERROR(<span class="stringliteral">&quot;[pcl::registration::LUM::setPose] The pose estimate is ignored for the first cloud in the graph since that will become the reference pose.\n&quot;</span>);</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  }</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  (*slam_graph_)[vertex].pose_ = pose;</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>registration/include/pcl/registration/<a class="el" href="lum_8h_source.html">lum.h</a></li>
<li>registration/include/pcl/registration/impl/<a class="el" href="lum_8hpp_source.html">lum.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><b>registration</b></li><li class="navelem"><a class="el" href="classpcl_1_1registration_1_1_l_u_m.html">LUM</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
